package manager;

import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;

import session.AlunoSession;
import session.EnderecoSession;
import session.NivelAcessoSession;
import session.TurmaSession;
import entidade.Aluno;
import entidade.Endereco;
import entidade.NivelAcesso;
import entidade.Telefone;
import entidade.Turma;

@Named
@RequestScoped
public class AlunoManager {

    @EJB
    private AlunoSession aSession;

    @EJB
    private NivelAcessoSession nivelSession;

    @EJB
    private EnderecoSession endSession;
    
    @EJB 
    private TurmaSession tSession;
    
    private Aluno aluno = new Aluno();
    
    public static List<Aluno> alunos;
   
    Endereco endereco = new Endereco();
    private Integer turmaId;
    private Telefone telefone = new Telefone();
    private List<Aluno> listarAlunos;
    private List<Turma> listarTurmas;

    public String init() {
		String login = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
		aluno = aSession.buscarPorLogin(login);
		return aluno.getNome();
	}
	public void save() {

            if(aluno.getId() == null){
            	NivelAcesso nAcesso = nivelSession.findById(1);
            	Turma turma = tSession.findById(turmaId); 
            	
            	endSession.insert(endereco);

                aluno.setNivelDeAutorizacao(nAcesso);
                aluno.setEndereco(endereco);
                aluno.setTurma(turma);
                
                aSession.insert(aluno);
            }else{
            	aSession.update(aluno);
            }
            aluno = new Aluno();
    }
	
	public String getDialog(Aluno aluno){
		prepararUpdateAluno(aluno);
		return "dialogGerAluno.show()";
	}
    
	public void prepararUpdateAluno(Aluno aluno){
		this.aluno = aluno;
		this.endereco = aluno.getEndereco();
		this.telefone = aluno.getTelefone();
	}
	
    public void excluir(Aluno aluno){
    	aSession.delete(aluno);
    	
    	aluno = new Aluno();
    }

    public Aluno getAluno() {
            return aluno;
    }

    public void setAluno(Aluno aluno) {
            this.aluno = aluno;
    }
    
    public List<Aluno> getListarAlunos() {
    	return listarAlunos;
	}

	public void setListarAlunos(List<Aluno> listarAlunos) {
		this.listarAlunos = listarAlunos;
	}
	
	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}
	
	public Integer getTurmaId() {
		return turmaId;
	}

	public void setTurmaId(Integer turmaId) {
		this.turmaId = turmaId;
	}
	
	public List<Turma> getListarTurmas() {
		return listarTurmas;
	}

	public void setListarTurmas(List<Turma> listarTurmas) {
		this.listarTurmas = listarTurmas;
	}
	
    public List<Aluno> getAlunos() {
		return alunos;
	}
	public void setAlunos(List<Aluno> alunos) {
		AlunoManager.alunos = alunos;
	}
	public Telefone getTelefone() {
		return telefone;
	}
	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}
}